package com.tjise.eduservice.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tjise.commonutils.R;
import com.tjise.eduservice.entity.EduCourse;
import com.tjise.eduservice.entity.vo.CoursePublishVo;
import com.tjise.eduservice.entity.vo.CourseVo;
import com.tjise.eduservice.service.EduCourseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 课程 前端控制器
 * </p>
 *
 * @author TJISE
 * @since 2021-06-23
 */
@Api(description = "课程管理")
@RestController
@RequestMapping("/eduservice/course")
@Slf4j
public class EduCourseController {
    @Autowired
    private EduCourseService eduCourseService;

    /**
     * 购买成功之后进行增加一条购买量
     */
    @GetMapping("/updateBuyCount/{courseId}")
    public boolean updateBuyCount(@PathVariable("courseId") String courseId) {
        EduCourse eduCourse = eduCourseService.getById(courseId);

        log.info("买的课程为"+eduCourse);
        // 将购买量加1
        eduCourse.setBuyCount(eduCourse.getBuyCount() + 1);
        return eduCourseService.updateById(eduCourse);

    }

    /**
     * 删除课程（根据课程id）
     */
    @DeleteMapping("{courseId}")
    public R deleteCourse(@PathVariable("courseId") String courseId) {

        eduCourseService.removeCourseById(courseId);
        return R.ok();
    }


    /**
     * 课程列表
     */
    @ApiOperation("获取全部的课程列表")
    @GetMapping()
    public R getCourseList() {
        List<EduCourse> list = eduCourseService.list(null);
        return R.ok().data("list", list);
    }

    /**
     * 分页的课程列表
     */
    @ApiOperation("课程列表的分页查询方法")
    @GetMapping("pageCourse/{current}/{limit}")
    public R pageListCourse(@PathVariable("current") Long current,
                            @PathVariable("limit") Long limit
    ) {
        // 调用service中的方法
        Page<EduCourse> eduCoursePage = eduCourseService.pageListCourse(current, limit);
        // 获取总页数
        long total = eduCoursePage.getTotal();
        // 每页数据的list集合
        List<EduCourse> records = eduCoursePage.getRecords();
        // 将数据封装入map中
        Map<String, Object> map = new HashMap<>();
        map.put("total", total);
        map.put("rows", records);
        // 将数据返回
        return R.ok().data(map);
    }

    /**
     * 带条件的分页查询
     */
    @ApiOperation("带条件的分页查询方法")
    @PostMapping("pageCourseCondition/{current}/{limit}")
    public R pageCourseCondition(
            @PathVariable("current") Long current,
            @PathVariable("limit") Long limit,
            @RequestBody EduCourse eduCourse
    ) {
        Page<EduCourse> eduCoursePage = eduCourseService.pageCourseCondition(current, limit, eduCourse);
        // 总记录数
        long total = eduCoursePage.getTotal();
        // 每页数据的list集合
        List<EduCourse> records = eduCoursePage.getRecords();


        return R.ok().data("total", total).data("rows", records);
    }


    /**
     * 添加课程基本信息的方法
     */
    @ApiOperation("新增课程")
    @PostMapping("addCourseInfo")
    public R addCourseInfo(@RequestBody CourseVo courseVo) {
        // 返回添加之后课程的id，为了后面添加大纲使用
        String id = eduCourseService.saveCourseInfo(courseVo);

        return R.ok().data("courseId", id);
    }

    /**
     * 根据课程id查询课程的基本信息
     */
    @ApiOperation("查询课程的基本信息")
    @GetMapping("getCourseInfo/{courseId}")
    public R getCourseInfo(@PathVariable("courseId") String courseId) {
        CourseVo courseVo = eduCourseService.getCourseInfo(courseId);
        return R.ok().data("courseInfoVo", courseVo);

    }

    /**
     * 修改课程的基本信息
     */
    @ApiOperation("修改课程的基本信息")
    @PostMapping("updateCouserInfo")
    public R updateCouserInfo(@RequestBody CourseVo courseVo) {
        eduCourseService.updateCourseInfo(courseVo);
        return R.ok();
    }

    /**
     * 根据课程id查询课程确认的信息
     */
    @ApiOperation("查询课程的确认信息")
    @GetMapping("getPublishCourseInfo/{id}")
    public R getPublishCourseInfo(@PathVariable("id") String id) {
        CoursePublishVo coursePublishVo = eduCourseService.publishCourseInfo(id);
        return R.ok().data("publishCourse", coursePublishVo);

    }

    /**
     * 课程的最终发布
     */
    @ApiOperation("课程的最终发布")
    @PostMapping("publishCourse/{id}")
    public R publishCourse(@PathVariable("id") String id) {
        // 修改课程最终发布的转态
        boolean flag = eduCourseService.publishCourseById(id);
        if (flag) {
            return R.ok();
        } else {
            return R.error();

        }
    }


}

